﻿using Evan.DataBase;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Xml;

namespace Web.Admin.ashx
{
    /// <summary>
    /// administrator 的摘要说明
    /// </summary>
    public class administrator : Evan.WebUI.ManagerAshxHelper
    {

        public override void ProcessRequest(HttpContext context)
        {
            #region token验证 安全模式为正常情况下不验证  开发模式下不验证
            //if (Evan.Common.SysComm.SecurityLevel()>0 || !(Evan.Common.SysComm.IsDevModel() || Evan.Common.SysComm.IsModuleSystem()))
            //{
            //    if (string.IsNullOrEmpty(Evan.Common.CommFun.GetForm("token")))
            //    {
            //        JsonResult(context, -9999, "非法操作");
            //    }
            //    if (!Evan.Common.CommFun.TokenVerify(Evan.Common.CommFun.GetForm("token")))
            //    {
            //        JsonResult(context, -9998, "非法操作");
            //    }
            //}
            #endregion

            string action = Evan.Common.CommFun.GetQueryString("action");
            if (!IsAdminLogin())
            {
                if (action == "adminLogin")
                {
                    AdminLogin(context);
                }
                else
                {
                    JsonResult(context, -99, "管理员未登陆");
                }
            }
            else
            {
                switch (action)
                {
                    case "adminUnLock":
                        AdminUnLock(context);
                        break;
                    case "addRoles":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "role", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        JsonResult(context, AddModel(context), "");
                        break;
                    case "editRoles":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "role", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        JsonResult(context, UpdateModel(context) ? 1 : 0, "");
                        break;
                    case "delRoles":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "role", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        break;
                    case "addAdministrator":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "admin", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        dynamic model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
                        if (!CheckHasAdmin(model,true))
                        {
                            JsonResult(context, -10, "");
                        }
                        else
                        {
                            model.Set("Pwd", Evan.Common.CommFun.EnPwd(model.Pwd));
                            JsonResult(context, AddAdministrator(context, model), "");
                        }
                        break;
                    case "editAdministrator":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "admin", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        dynamic model_edit = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
                        if (!CheckHasAdmin(model_edit,false))
                        {
                            JsonResult(context, -10, "");
                        }
                        else
                        {
                            model_edit.Set("Pwd", Evan.Common.CommFun.EnPwd(model_edit.Pwd));
                            JsonResult(context, UpdateAdministrator(context, model_edit) ? 1 : 0, "");
                        }
                        break;
                    case "delAdministrator":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "admin", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        break;
                    case "addChannel":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "channel", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        AddChannel(context);
                        break;
                    case "editChannel":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "channel", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        editChannel(context);
                        break;
                    case "delChannel":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "channel", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        //JsonResult(context, UpdateModel(context) ? 1 : 0, "");
                        break;
                    case "addFields": //添加字段
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "channel", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        AddField(context);
                        break;
                    case "SetState": //设置数据状态
                        ///内部控制权限
                        SetStates(context);
                        break;
                    case "SetSortId": //设置排序ID
                        SetSortIds(context);
                        break;
                    case "UpSortId":    /*2017.08.07 张浩修改，箭头排序值的点击事件*/
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "channel", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        UpSortIds(context);
                        break;
                    case "DownSortId":    /*2017.08.07 张浩修改，箭头排序值的点击事件*/
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "channel", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        DownSortIds(context);
                        break;
                    case "SetTop":
                        ///内部控制权限
                        SetTops(context);
                        break;
                    case "SetIndex":
                        ///内部控制权限
                        SetIndexs(context);
                        break;
                    case "SetHot":
                        ///内部控制权限
                        SetHots(context);
                        break;
                    case "SetRed":
                        ///内部控制权限
                        SetReds(context);
                        break;
                    case "CopyData": //复制数据
                        ///内部控制权限
                        CopyData(context);
                        break;
                    case "SetState_Lock":
                        ///内部控制权限
                        SetStates_Select(context, 0);
                        break;
                    case "SetState_UnLock":
                        ///内部控制权限
                        SetStates_Select(context, 1);
                        break;
                    case "SetState_Delete":
                        ///内部控制权限
                        SetStates_Select(context, -1);
                        break;
                    case "LayerSetPwd":
                        //只要是管理员登录都可以修改自己的密码 , 无需控制权限
                        LayerSetPwd(context);
                        break;
                    case "editVersions":
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "system", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        editVersions(context);
                        break;
                    case "RealDel":
                        //真实删除
                        Recycle_RealDel(context);
                        break;
                    case "Restore":
                        //恢复
                        Recycle_Restore(context);
                        break;
                    case "RealDels":
                        //真实删除 批量
                        Recycle_RealDels(context);
                        break;
                    case "Restores":
                        //恢复 批量
                        Recycle_Restores(context);
                        break;
                    case "addComponent":
                    case "editComponent":
                    case "addTemplate":
                    case "editTemplate":
                        //模块操作
                        #region 权限控制
                        HasRole = Evan.Member.Administrator.HasRole(0, "0", "template", "");
                        VerifyRoles(context, HasRole);
                        #endregion 
                        TemplateOpera(context, action);
                        break;
                    case "CreateSiteMap":
                        CreateSiteMap(context);
                        break;
                    case "GetUrlList":
                        GetUrlList(context);
                        break;
                    case "CreateStaticPage":
                        //3个参数 
                        CreatePage(context);
                        break;
                    case "ChannelQuickOperat":
                        ChannelQuickOperats(context);
                        break;
                    default:
                        ///内部权限控制
                        DefaultHandle(context, action);
                        break;
                }
            }
        }



        #region Template操作

        /// <summary>
        /// 创建模板文件
        /// 每次保存模板的时候就生成一次
        /// 保存模块的时候不能生成
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public void CreateTemplate(dynamic model, string templatePath)
        {
            templatePath = templatePath + model.TemplateName.ToString() + ".aspx";
            if (!System.IO.File.Exists(HttpContext.Current.Server.MapPath(templatePath)))
            {
                //假装拿到了数据
                //生成文件
                string temp = Evan.Common.DirFile.ReadFile("/App_Data/Template/TemplateBase.aspx");
                if (Convert.ToInt32(model.TemplatePageType) == 0)
                {
                    //综合页或者是综合链接的话
                    temp = temp.Replace("{{TemplatePageType}}", "ComPage");
                    temp = temp.Replace("{{TemplateType}}", "ComPage");
                }
                else
                {
                    temp = temp.Replace("{{TemplatePageType}}", Evan.Template.TemplateHelper.GetTableNameByPageType(Convert.ToInt32(model.TemplatePageType)));
                    temp = temp.Replace("{{TemplateType}}", model.TemplateType);
                }
                //生成模板前  ,  需要生成一遍引用  , 先生成引用 , 然后在生成模板
                //假装引用已经生成
                Evan.Common.DirFile.SaveFile(temp, templatePath, true);
            }
            else
            {
                //存在文件 , 忽略
            }
        }

        /// <summary>
        /// 创建引用模块
        /// 每次保存模块的时候生成一次
        /// 保存模板的时候不用生成模块
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public void CreateComponent(dynamic model, string templatePath)
        {
            templatePath = templatePath + model.TemplateName.ToString() + ".html";
            if (!System.IO.File.Exists(HttpContext.Current.Server.MapPath(templatePath)))
            {
                //假装拿到了数据
                //生成文件
                string temp = Evan.Common.DirFile.ReadFile("/App_Data/Template/ComponentBase.html");
                Evan.Common.DirFile.SaveFile(temp, templatePath, true);
            }
        }

        public void SaveTempAndComp(dynamic model)
        {
            string templatePath = "templates";
            
            if (model.TemplateCategory.ToString() == "Template")
            {
                //模板
                //然后执行CreateTemplate 方法
                templatePath = "~/" + templatePath + "/" + (string.IsNullOrEmpty(model.TemplatePath.ToString()) ? "" : model.TemplatePath.ToString() + "/");
                Evan.Common.DirFile.CreateDir(templatePath); //创建目录

                CreateTemplate(model,templatePath);
            }
            if (model.TemplateCategory.ToString() == "Component")
            {
                //模块
                //然后执行CreateTemplate 方法
                templatePath = "~/" + templatePath + "/_include/" + (string.IsNullOrEmpty(model.TemplatePath.ToString()) ? "" : model.TemplatePath.ToString() + "/");
                Evan.Common.DirFile.CreateDir(templatePath); //创建目录

                CreateComponent(model, templatePath);
            }
        }

        public void TemplateOpera(HttpContext context,string action)
        {
            dynamic model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
            if (action.StartsWith("add"))
            {
                //添加数据库
                int IsOk = AddModel(context);
                //生成模板
                SaveTempAndComp(model);
                JsonResult(context, IsOk, "");
            }
            if (action.StartsWith("edit"))
            {
                //修改数据库
                int IsOk = UpdateModel(context) ? 1 : 0;
                //生成模板
                SaveTempAndComp(model);
                JsonResult(context, IsOk, "");
            }
        }
        #endregion

        #region 修改站点信息
        public void editVersions(HttpContext context)
        {
            JsonResult(context, UpdateModel(context) ? 1 : 0, "");
        }
        #endregion

        #region 修改当前登录的管理员密码
        public void LayerSetPwd(HttpContext context)
        {
            Dictionary<string, object> adminInfo = Evan.Member.Administrator.GetAdminInfoFromCache();

            string oldpwd_cache = adminInfo["Pwd"].ToString();
            string oldpwd_param = GetParam("oldpwd");
            oldpwd_param = Evan.Common.CommFun.EnPwd(oldpwd_param);

            if (oldpwd_param != oldpwd_cache)
            {
                JsonResult(context, 0, "旧密码不正确");
            }

            string newpwd = GetParam("newpwd");
            newpwd = Evan.Common.CommFun.EnPwd(newpwd);

            Evan.DataBase.DbOperat db = new Evan.DataBase.DbOperat("Administrator");
            bool IsOk = db.UpdateFields_1("Pwd=@Pwd,EditTime=GetDate(),RePwdTimeSpan=GetDate()", "Id=@Id", newpwd, adminInfo["Id"].ToString());

            if (IsOk)
            {
                Evan.SystemLog.SysLog.AddSysLog("管理员修改密码", Evan.Member.Administrator.GetAdminName() + "修改登录密码");
                Evan.Member.Administrator.ClearAdminInfo(); //退出登录
                JsonResult(context, 1, "密码修改成功");
            }
            else
            {
                JsonResult(context, -1, "修改失败");
            }
        }
        #endregion

        #region 批量操作
        /// <summary>
        /// 选中的数据进行状态更改
        /// </summary>
        /// <param name="context"></param>
        /// <param name="state">-1 删除 0 锁定 1 正常</param>
        public void SetStates_Select(HttpContext context, int states)
        {
            string table = GetParam("table"); //数据所在表
            string ids = GetParam("ids"); //数据ID

            string classid = GetParam("classid");
            string roletype = "delete";
            //包含三种状态 states 1 0 为update权限 -1 为删除权限
            if (states == 1 || states == 0)
            {
                roletype = "update";
            }
            #region 如果操作的是组件的话 权限和表使用模板的
            if (table.ToLower()== "Component".ToLower())
            {
                table = "Template";
            }
            #endregion
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);

            int IsOK =new Evan.DataBase.DbOperat().ExecSqlCmd_NonQuery(string.Format("UPDATE {0} SET States={1} WHERE Id in ({2})", table, states, ids), null);
            // bool IsOK = new Evan.DataBase.DbOperat().UpdateFields_2(table, "States=@States", "Id=@Id", states, ids);

            JsonResult(context, IsOK > 0 ? 1 : 0, "");
        }

        #endregion

        #region 字段管理
        public void AddField(HttpContext context)
        {
            int isok = AddFields(context);
            JsonResult(context, isok, "");
        }
        #endregion

        /// <summary>
        /// 复制数据 仅支持1对1全复制
        /// </summary>
        /// <param name="context"></param>
        public void CopyData(HttpContext context)
        {
            // 复制的是栏目还是普通数据  
            string table = GetParam("table"); //数据所在表 //如果表名称是Channel则是复制栏目
            string id = GetParam("id"); //数据ID

            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "add"; //复制数据属于添加权限
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            //先复制当前数据
            int IsOK = new Evan.DataBase.DbOperat(table).CopyData(table, id, null);
            if (IsOK > 0)
            {
                //复制成功
                if (table.ToUpper() == "Channel".ToUpper()) //如果是栏目表
                {
                    //继续复制数据库字段(fields)
                    Dictionary<string, string> CusFieldsList = new Dictionary<string, string>();
                    CusFieldsList.Add("ClassId", IsOK.ToString());
                    bool CopyFieldsIsOk = new Evan.DataBase.DbOperat(table).CopyChannelFields("Fields", id, CusFieldsList);


                    //继续复制数据库模块(modules)
                    //Dictionary<string, string> CusModulesList = new Dictionary<string, string>();
                    //CusModulesList.Add("ChannelId", IsOK.ToString());
                    //bool CopyModuleIsOk = new Evan.DataBase.DbOperat(table).CopyChannelModules("Module", id, CusModulesList);

                    //获得被复制对象的对象
                    //dynamic channelmodel = new Evan.DataBase.DbOperat(table).GetModel(Convert.ToInt32(id));
                    //dynamic CopyChannelSource = new Evan.DataBase.DbOperat(table).GetModel(Convert.ToInt32(id));

                    ////--
                    //string ChannelType = ((Evan.Template.TemplateHelper.PageTypeEnum)channelmodel.PageType).ToString(); //模板对应文件夹
                    ////除了模板对应文件夹外还有英文名称
                    //string EnTitle = channelmodel.EnTitle;
                    //EnTitle = EnTitle.Replace(' ', '_');
                    ////复制被复制对象的文件夹
                    //var oldPath = @"~\App_Data\Template\" + ChannelType + "\\" + EnTitle + "\\";
                    //var newPath = @"~\App_Data\Template\" + ChannelType + "\\CopyTemplate" + IsOK + "\\";
                    ////Evan.Common.DirFile.CopyDir(HttpContext.Current.Server.MapPath(oldPath), HttpContext.Current.Server.MapPath(newPath));

                    //CopyFile(HttpContext.Current.Server.MapPath(oldPath), HttpContext.Current.Server.MapPath(newPath));
                    //"".TrimEnd('/')

                    //要拿到刚刚被复制的对象 , 用被复制的对象的WebPath 查找 拿到最新ID即可  拿到对象后更新WebPath值 /webpath/Copy/
                    dynamic CopyChannelModel = new Evan.DataBase.DbOperat(table).GetModel(IsOK);
                    if (!string.IsNullOrEmpty(CopyChannelModel.WebPath))
                    {
                        CopyChannelModel.Set("WebPath", CopyChannelModel.WebPath.TrimEnd('/') + IsOK + "/"); //复制栏目的更新WebPath为 /Webpath@id/
                        new Evan.DataBase.DbOperat(table).Update(CopyChannelModel);
                    }

                    if (CopyFieldsIsOk)
                    {

                        //字段复制成功
                        //可以生成伪静态了
                        AutoRewriteAdd(context, CopyChannelModel);

                        #region 复制栏目里面的内容
                        //生成伪静态后 如果要复制数据 就开始复制数据
                        string hasdata = GetParam("hasdata");
                        if (hasdata == "1")
                        {
                            //需要复制内容的表
                            string relateTable = Evan.Template.TemplateHelper.GetTableNameByPageType(CopyChannelModel.PageType);
                            if (!string.IsNullOrEmpty(relateTable))//栏目有表名，有数据 在进行数据复制
                            {
                                new Evan.DataBase.DbOperat(relateTable).CopyChannelData(relateTable, id.ToString(), CusFieldsList);

                            }
                        }
                        #endregion


                        // 500行左右， JsonResult(context, 1, "复制成功"); 前插入此代码块
                        #region 复制子级栏目

                        if (GetParam("haschild") == "1")
                        {
                            var Childlist = new DbOperat("Channel").GetList($"ParentId={id}");
                            var result = CopyChildChannel(context, Childlist, IsOK.ToString());

                            if (!result) //复制失败把级别最高的栏目删掉
                            {
                                CopyChannelModel.Set("States", -1);
                                new Evan.DataBase.DbOperat("Channel").Update(CopyChannelModel);
                            }
                            else
                                JsonResult(context, 1, "复制失败");

                        }

                        #endregion


                        JsonResult(context, 1, "复制成功");
                    }
                    else
                    {
                        //字段复制失败
                        JsonResult(context, 0, "复制栏目字段失败 , 请刷新后删除复制出来的栏目后重新再试");
                    }

                    //if (CopyIsOk && CopyModuleIsOk)
                    //{
                    //    JsonResult(context, 1, "复制成功");
                    //}
                    //else
                    //{
                    //    if (CopyIsOk)
                    //    {
                    //        JsonResult(context, 1, "字段复制成功，模块复制失败。");
                    //    }
                    //    else if (CopyModuleIsOk)
                    //    {
                    //        JsonResult(context, 1, "字段复制失败，模块复制成功。");
                    //    }
                    //    else
                    //    {
                    //        JsonResult(context, 0, "复制栏目字段失败 , 请重新再试");
                    //    }
                    //}
                }
                else
                {
                    //复制完成
                    JsonResult(context, 1, "复制成功");
                }
            }
            else
            {
                //复制失败
                JsonResult(context, 0, "复制当前数据失败 , 请重新再试");
            }
        }

        /// <summary>
        /// 复制子级栏目
        /// </summary>
        /// <param name="context">context</param>
        /// <param name="Childlist">子级栏目集合</param>
        /// <param name="parentId">父级Id</param>
        private bool CopyChildChannel(HttpContext context, List<dynamic> Childlist, string parentId)
        {

            foreach (var item in Childlist)
            {
                Dictionary<string, string> CusFields = new Dictionary<string, string>();
                CusFields.Add("ParentId", parentId.ToString());

                //先复制当前数据
                int IsOK = new DbOperat("Channel").CopyData("Channel", item.Id.ToString(), CusFields);

                if (IsOK <= 0) return false;

                //继续复制数据库字段(fields)
                Dictionary<string, string> CusFieldsList = new Dictionary<string, string>();
                CusFieldsList.Add("ClassId", IsOK.ToString());
                bool CopyFieldsIsOk = new DbOperat("Channel").CopyChannelFields("Fields", item.Id.ToString(), CusFieldsList);

                //要拿到刚刚被复制的对象 , 用被复制的对象的WebPath 查找 拿到最新ID即可  拿到对象后更新WebPath值 /webpath/Copy/
                dynamic CopyChannelModel = new DbOperat("Channel").GetModel(IsOK);
                if (!string.IsNullOrEmpty(CopyChannelModel.WebPath))
                {
                    CopyChannelModel.Set("WebPath", CopyChannelModel.WebPath.TrimEnd('/') + IsOK + "/"); //复制栏目的更新WebPath为 /Webpath@id/
                    new DbOperat("Channel").Update(CopyChannelModel);
                }

                if (CopyFieldsIsOk)
                {
                    //字段复制成功
                    //可以生成伪静态了
                    AutoRewriteAdd(context, CopyChannelModel);

                    #region 复制栏目里面的内容
                    //生成伪静态后 如果要复制数据 就开始复制数据
                    string hasdata = GetParam("hasdata");
                    if (hasdata == "1")
                    {
                        //需要复制内容的表
                        string relateTable = Evan.Template.TemplateHelper.GetTableNameByPageType(CopyChannelModel.PageType);
                        if (!string.IsNullOrEmpty(relateTable))//栏目有数据 数据也复制过来
                        {
                            new DbOperat(relateTable).CopyChannelData(relateTable, item.Id.ToString(), CusFieldsList);

                        }
                    }
                    #endregion

                    //复制完成后继续查询子级栏目
                    Childlist = new DbOperat("Channel").GetList("ParentId=" + item.Id);

                    if (Childlist.Count > 0)
                    {
                        CopyChildChannel(context, Childlist, IsOK.ToString());
                    }
                }
                else
                {
                    return false;
                }
            }

            return true;
        }


        private void CopyFile(string sources, string dest)
        {
            try
            {
                DirectoryInfo dinfo = new DirectoryInfo(sources);//注，这里面传的是路径，并不是文件，所以不能保含带后缀的文件
                foreach (FileSystemInfo f in dinfo.GetFileSystemInfos())
                {
                    //目标路径destName = 目标文件夹路径 + 原文件夹下的子文件(或文件夹)名字
                    //Path.Combine(string a ,string b) 为合并两个字符串
                    String destName = Path.Combine(dest, f.Name);
                    if (!Directory.Exists(dest))
                    {
                        Directory.CreateDirectory(dest);
                    }
                    if (f is FileInfo)//如果是文件就复制
                    {
                        File.Copy(f.FullName, destName, true);//true代表可以覆盖同名文件
                    }
                    else//如果是文件夹就创建文件夹然后复制然后递归复制
                    {
                        Directory.CreateDirectory(destName);
                        CopyFile(f.FullName, destName);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void SetSortIds(HttpContext context)
        {
            bool IsOK = SetSortId(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }

        #region 箭头排序
        /*2017.08.07 张浩修改，箭头排序值的点击事件*/
        public void UpSortIds(HttpContext context)
        {
            bool IsOK = UpSortId(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        /*2017.08.07 张浩修改，箭头排序值的点击事件*/
        public void DownSortIds(HttpContext context)
        {
            bool IsOK = DownSortId(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        #endregion 

        public void SetStates(HttpContext context)
        {
            string table = GetParam("table");
            string states = GetParam("states");
            #region 如果操作的是组件的话 权限和表使用模板的
            if (table.ToLower() == "Component".ToLower())
            {
                table = "Template";
            }
            #endregion
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "update";
            switch (states)
            {
                case "-1":
                    roletype = "delete";
                    break;
                case "0":
                    roletype = "update";
                    break;
                case "1":
                    roletype = "update";
                    break;
                default:
                    roletype = "update";
                    break;
            }
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion


            bool IsOK = SetState(context);

            if (table.ToUpper() == "CHANNEL")
            {
                //删除
                if (int.Parse(states) == -1)
                {
                    //dynamic model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
                    AutoRewriteDel(Convert.ToInt32(GetParam("id")));
                }
                //锁定
                if (int.Parse(states) == 0)
                {
                    //dynamic model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
                    AutoRewriteDel(Convert.ToInt32(GetParam("id")));
                }
                //解锁
                if (int.Parse(states) == 1)
                {

                    //dynamic model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
                    int ChannelId = Convert.ToInt32(GetParam("id"));
                    dynamic model = new Evan.DataBase.DbOperat("Channel").GetModel(ChannelId);
                    AutoRewriteDel(Convert.ToInt32(model.Id));
                    AutoRewriteAdd(context, model);
                    //新增加 , 解锁的时候需要重新走一遍模块流程
                    AutoFieldByTemplate(ChannelId);
                }
            }
            JsonResult(context, IsOK ? 1 : 0, "");
        }

        #region 列表快捷操作
        public void SetTops(HttpContext context)
        {
            string table = GetParam("table");
            string states = GetParam("states");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "update";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = SetTop(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        public void SetIndexs(HttpContext context)
        {
            string table = GetParam("table");
            string states = GetParam("states");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "update";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = SetIndex(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        public void SetHots(HttpContext context)
        {
            string table = GetParam("table");
            string states = GetParam("states");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "update";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = SetHot(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        public void SetReds(HttpContext context)
        {
            string table = GetParam("table");
            string states = GetParam("states");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "update";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = SetRed(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        #endregion

        #region 栏目右侧快捷操作
        public void ChannelQuickOperats(HttpContext context)
        {
            #region 权限控制
            HasRole = Evan.Member.Administrator.HasRole(0, "0", "channel", "");
            VerifyRoles(context, HasRole);
            #endregion
            bool IsOK = ChannelQuickOperat(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        #endregion

        #region 回收站操作
        public void Recycle_RealDel(HttpContext context)
        {
            string table = GetParam("table");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "restore";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = RealDel(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        public void Recycle_Restore(HttpContext context)
        {
            string table = GetParam("table");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "restore";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = Restore(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }

        public void Recycle_RealDels(HttpContext context)
        {
            string table = GetParam("table");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "realdel";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = RealDels(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }
        public void Recycle_Restores(HttpContext context)
        {
            string table = GetParam("table");
            #region 权限控制
            string classid = GetParam("classid");
            string roletype = "restore";
            HasRole = ReturnHasRole(context, table, roletype, classid);
            VerifyRoles(context, HasRole);
            #endregion

            bool IsOK = Restores(context);
            JsonResult(context, IsOK ? 1 : 0, "");
        }

        #endregion 

        public void DefaultHandle(HttpContext context, string action)
        {
            string ClassId = GetParam("ClassId");
            if (action.StartsWith("add"))
            {
                HasRole = Evan.Member.Administrator.HasRole(1, ClassId.ToString(), "", "add");
                VerifyRoles(context, HasRole);

                JsonResult(context, AddModel(context), "");
            }
            if (action.StartsWith("edit"))
            {
                HasRole = Evan.Member.Administrator.HasRole(1, ClassId.ToString(), "", "update");
                VerifyRoles(context, HasRole);

                JsonResult(context, UpdateModel(context) ? 1 : 0, "");
            }

        }



        #region 栏目的更新添加

        /// <summary>
        /// 检查WebPath是不是已经存在
        /// <para>如果编辑的是综合页的话 , 在上游判断就跳过了 , 因为综合页可以是任何Url </para>
        /// <para>只有在非综合页的时候才会要求不一致</para>
        /// </summary>
        /// <param name="WebPath"></param>
        /// <returns>如果是true 则说明存在   false=不存在</returns>
        private bool CheckHasWebPath(string WebPath, int Id = 0)
        {
            //如果是开发模式 , 默认不验证
            if (Evan.Common.CommFun.GetAppSetting("DevMode") == "1")
            {
                return false;
            }
            if (string.IsNullOrEmpty(WebPath))
            {
                return false;
            }
            if (WebPath.ToLower() == "javascript:;")
            {
                return false;
            }
            dynamic Channel = new Evan.DataBase.DbOperat("Channel").GetModel_1("States>-1 and WebPath=@WebPath and PageType<>0" + (Id > 0 ? (" and Id<>" + Id + " ") : ""), WebPath);
            if (Channel == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        /// <summary>
        /// 添加栏目
        /// </summary>
        /// <param name="context"></param>
        public void AddChannel(HttpContext context)
        {
            dynamic model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
            if (CheckHasWebPath(model.WebPath) && Convert.ToInt32(model.PageType) > 0)
            {
                JsonResult(context, -10, "");
            }
            else
            {
                int AddChannelIsOk = AddModel(context, model);
                if (AddChannelIsOk > 0)
                {
                    model.Set("Id", AddChannelIsOk);
                    AutoRewriteAdd(context, model);
                    //套模板添加字段
                    AutoFieldByTemplate(AddChannelIsOk);
                }
                JsonResult(context, AddChannelIsOk, "");
            }
        }

        /// <summary>
        /// 编辑栏目
        /// </summary>
        /// <param name="context"></param>
        public void editChannel(HttpContext context)
        {
            dynamic model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));
            if (CheckHasWebPath(model.WebPath, Convert.ToInt32(model.Id)) && Convert.ToInt32(model.PageType) > 0)
            {
                JsonResult(context, -10, "");
            }
            else
            {
                if (UpdateModel(context))
                {
                    model = Evan.Model.ConvertModel.ConvertToDynamic(GetParam("model"));

                    AutoRewriteAdd(context, model);
                    //套模板添加字段
                    AutoFieldByTemplate(Convert.ToInt32(model.Id));
                    JsonResult(context, 1, "");
                }
                else
                {
                    JsonResult(context, 0, "");
                }

            }

        }

        #endregion



    }
}